package com.hjm.project.agentRateInfo.service.impl;

import com.hjm.common.exception.BusinessException;
import com.hjm.common.utils.DateUtils;
import com.hjm.common.utils.security.ShiroUtils;
import com.hjm.common.utils.text.Convert;
import com.hjm.project.agentRateInfo.domain.AgentRateInfo;
import com.hjm.project.agentRateInfo.mapper.AgentRateInfoMapper;
import com.hjm.project.agentRateInfo.service.IAgentRateInfoService;
import com.hjm.project.merchantModel.domain.MerchantModel;
import com.hjm.project.merchantModel.mapper.MerchantModelMapper;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 代理商费率模版Service业务层处理
 * 
 * @author Gdd
 */
@Service
public class AgentRateInfoServiceImpl implements IAgentRateInfoService {
    @Resource
    private AgentRateInfoMapper agentRateInfoMapper;
    @Resource
    private MerchantModelMapper merchantModelMapper;

    /**
     * 查询代理商费率模版
     * 
     * @param id 代理商费率模版ID
     * @return 代理商费率模版
     */
    @Override
    public AgentRateInfo selectAgentRateInfoById(String id) {
        return agentRateInfoMapper.selectAgentRateInfoById(id);
    }

    /**
     * 查询代理商费率模版列表
     * 
     * @param agentRateInfo 代理商费率模版
     * @return 代理商费率模版
     */
    @Override
    public List<AgentRateInfo> selectAgentRateInfoList(AgentRateInfo agentRateInfo) {
        return agentRateInfoMapper.selectAgentRateInfoList(agentRateInfo);
    }

    /**
     * 查询代理商费率模版列表
     *
     * @param agentRateInfo 代理商费率模版
     * @return 代理商费率模版 一个结果
     */
    @Override
    public AgentRateInfo selectAgentRateInfoOne(AgentRateInfo agentRateInfo) {
        return agentRateInfoMapper.selectAgentRateInfoOne(agentRateInfo);
    }

    /**
     * 新增代理商费率模版
     * 
     * @param agentRateInfo 代理商费率模版
     * @return 结果
     */
    @Override
    @Transactional
    public int insertAgentRateInfo(AgentRateInfo agentRateInfo) {
        //已配置过的模版不可重复配置
        AgentRateInfo ari = new AgentRateInfo();
        ari.setFjArMark(agentRateInfo.getFjArMark());
        ari.setArMark(agentRateInfo.getArMark());
        ari.setAgentNum(ShiroUtils.getLoginAgentNum());
        List<AgentRateInfo> agentRateInfoList = agentRateInfoMapper.selectAgentRateInfoList(ari);
        if (CollectionUtils.isNotEmpty(agentRateInfoList)) {
            throw new BusinessException("当前费率模版已配置,请重新选择");
        }

        //模版只能存在一个默认
        if (1 == agentRateInfo.getIsdefault()) {
            AgentRateInfo updateAgentRateInfo = new AgentRateInfo();
            updateAgentRateInfo.setIsdefault(0);
            updateAgentRateInfo.setAgentNum(ShiroUtils.getLoginAgentNum());
            agentRateInfoMapper.updateAgentRateInfo(updateAgentRateInfo);
        }

        //获取模版类型
        MerchantModel mm = new MerchantModel();
        mm.setModelNo(agentRateInfo.getArMark());
        MerchantModel merchantModel = merchantModelMapper.selectMerchantModelOne(mm);
        int merType = Integer.parseInt(merchantModel.getModelType());
        if (merType == 0) {
            merType = 1;
        } else if (merType == 4){
            merType = 0;
        }
        agentRateInfo.setMerType(merType);
        agentRateInfo.setAgentNum(ShiroUtils.getLoginAgentNum());
        agentRateInfo.setAddDate(DateUtils.getDateTime());
        return agentRateInfoMapper.insertAgentRateInfo(agentRateInfo);
    }

    /**
     * 修改代理商费率模版
     * 
     * @param agentRateInfo 代理商费率模版
     * @return 结果
     */
    @Override
    public int updateAgentRateInfo(AgentRateInfo agentRateInfo) {
        //查看当前选择的模板是否已经配置过
        AgentRateInfo ari = new AgentRateInfo();
        ari.setFjArMark(agentRateInfo.getFjArMark());
        ari.setArMark(agentRateInfo.getArMark());
        ari.setAgentNum(ShiroUtils.getLoginAgentNum());
        List<AgentRateInfo> agentRateInfoList = agentRateInfoMapper.selectAgentRateInfoList(ari);
        if (CollectionUtils.isNotEmpty(agentRateInfoList) && agentRateInfo.getId() != agentRateInfoList.get(0).getId()) {
            throw new BusinessException("当前费率模版已配置,请重新选择");
        }

        //模版只能存在一个默认
        if (0 == agentRateInfo.getIsdefault()) {
            AgentRateInfo updateAgentRateInfo = new AgentRateInfo();
            updateAgentRateInfo.setIsdefault(1);
            updateAgentRateInfo.setAgentNum(ShiroUtils.getLoginAgentNum());
            agentRateInfoMapper.updateAgentRateInfo(updateAgentRateInfo);
        }
        return agentRateInfoMapper.updateAgentRateInfoById(agentRateInfo);
    }
    @Override
    public int updateAgentRate(AgentRateInfo agentRateInfo) {
        return agentRateInfoMapper.updateAgentRateInfo(agentRateInfo);
    }

    @Override
    public int updateAgentRateInfoById(AgentRateInfo agentRateInfo) {
        return agentRateInfoMapper.updateAgentRateInfoById(agentRateInfo);
    }

    /**
     * 删除代理商费率模版对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteAgentRateInfoByIds(String ids) {
        return agentRateInfoMapper.deleteAgentRateInfoByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除代理商费率模版信息
     * 
     * @param id 代理商费率模版ID
     * @return 结果
     */
    @Override
    public int deleteAgentRateInfoById(Integer id) {
        return agentRateInfoMapper.deleteAgentRateInfoById(id);
    }
}
